package generic_test;

/**
 * @author yuisama
 * @date 2022/05/29 15:09
 **/
public class MessageTest {
    public static void main(String[] args) {
//        IMessage<String> message = new MessageImpl1<>();
//        message.print("123");
//        IMessage<Integer> message1 = new MessageImpl1<>();
//        message1.print(123);
//        IMessage<String> msg2 = new MessageImpl2();
//        msg2.print("345");
//        IMessage<Integer> msg3 = new MessageImpl2();
//        msg2.print(34);
//        IMessage<String> msg1 = new MessageImpl1<>();
//        msg1.setMsg("鹏哥真帅");
//        IMessage<Integer> msg2 = new MessageImpl1<>();
//        msg2.setMsg(10);
//        fun(msg1);
//        fun(msg2);
//        IMessage<Integer> msg = new MessageImpl1<>();
//        msg.setMsg(123);
//        fun2(msg);
//        IMessage<Double> msg1 = new MessageImpl1<>();
//        msg1.setMsg(12.3);
//        fun2(msg1);
//        IMessage<String> msg2 = new MessageImpl1<>();
//        msg2.setMsg("红温");
//        fun2(msg2);
        IMessage<String> msg1 = new MessageImpl1<>();
        msg1.setMsg("鹏哥很帅");
        fun3(msg1);
//        IMessage<Integer> msg2 = new MessageImpl1<>();
//        msg2.setMsg(18);
//        fun3(msg2);
    }

    // 此时fun3只能接收String及其父类的对象
    public static void fun3(IMessage<? super String> msg) {
        msg.setMsg("铭哥也还可以");
        System.out.println(msg.getMsg());
    }

    // 这个msg仍然可以接收任何类型，但是必须是Number及其子类
    public static void fun2(IMessage<? extends Number> msg) {
        // 不同的子类之间的类型没有任何关系，不能设置值
//        msg.setMsg(10);
        System.out.println(msg.getMsg());
    }

    public static void fun(IMessage<?> msg) {
        System.out.println(msg.getMsg());
    }


}